package com.itheima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.anno.MyLog;
import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import com.itheima.pojo.PageBean;
import com.itheima.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

@Service
public class EmpServiceImpl  implements EmpService {
    @Autowired
    private EmpMapper empMapper;
    /*
      基础分页查询
          返回一个PageBean对象
             rows
             total
             这是传统的 写法
     */
//    @Override
//    public PageBean page(Integer page, Integer pageSize) {
//
//        // rows 当前页的记录  select * from emp limit ?,?结果
//        // 设置一个起始索引
//        int begin = (page-1)*pageSize;
//        List<Emp> rows = empMapper.page(begin,pageSize);
//        // total 符合要求的记录数 select count(*) from emp
//        Long total = empMapper.count();
//        //创建一个 PageBean对象
//        // 封装 rows total
//        PageBean pb = new PageBean(total,rows);
////        pb.setRows(rows);
////        pb.setTotal(total);
//        return pb;
//    }

    /*
    PageHelper插件写法

     */
    @Override
    public PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {
       //1:使用PageHelper 设置分页参数
        PageHelper.startPage(page,pageSize);//传递分页参数
        //2:调用基础sql方法  插件会自动 增强
                        //四个查询参数 传递 sql执行哪里
        List<Emp> empList = empMapper.page(name,gender,begin, end);//底层对象是page

        //3:empList 现在是List形式 祖宗--子 ArrayList -- Page
        Page<Emp> p = (Page<Emp>)empList;
        // page里面封装了  总条数 和 当前页数据
                  // p.getTotal() 总条数  p.getResult() 当前页数据
    // Page<E> extends ArrayList<E>
        //创建一个 PageBean对象
        // 封装 rows total
        PageBean pb = new PageBean(p.getTotal(),p.getResult());
        return pb;
    }

    @Override
    @MyLog
    public void delete(Integer[] ids) {
        //调用mapper
        empMapper.delete(ids);
        // 将删除操作  记录到日志表中
    }

    @Override
    @MyLog
    public void add(Emp emp) {
        //找mapper
        // 设置基础字段
        emp.setCreateTime(LocalDateTime.now());
        emp.setUpdateTime(LocalDateTime.now());

        empMapper.add(emp);

        // 将添加操作  记录到日志表中

    }

    @Override
    public Emp getById(Integer id) {
        //mapper干活
        return empMapper.getById(id);
    }

    @Override
    @MyLog
    public void update(Emp emp) {
        //更新潜规则 设置 更新时间
        emp.setUpdateTime(LocalDateTime.now());

        //mapper干活
        empMapper.update(emp);

        // 将更新操作  记录到日志表中
    }

    @Override
    public Emp login(Emp emp) {
        //mapper完成
        Emp loginEmp = empMapper.getByUsernameAndPassword(emp);
        return loginEmp;
    }
}
